package uba.ing2.subite.services;

import uba.ing2.subite.domain.Invoice;
import uba.ing2.subite.domain.PaidInvoice;
import uba.ing2.subite.domain.PaymentCard;

/**
 * Brinda servicios para realizar pagos de {@link Invoice facturas} mediante
 * {@link PaymentCard tarjetas de pago}.
 */
public interface PaymentService {
    /**
     * Procesa el pago de una factura.
     * @return una representación de la factura paga
     * @throws PaymentRejectedException en caso de que el pago haya sido rechazado por alguna razón (por ejemplo saldo insuficiente)
     */
    PaidInvoice processPayment(Invoice invoice, PaymentCard card) throws PaymentRejectedException;
}
